How To Build GNU Readline for ARM


Intro


In this How To we are going to build readline 6.2 with our GCC/G++ 4.8.2 cross-compiler. Be sure to start this build in a new terminal/tab to avoid any pollution from previous builds.

Tar Balls


Here is a list of source packages that we'll need for the build. You can either download them now or wait 'til later in the How To.
  • readline-6.2.tar.gz
  • readline-6.2-fixes-1.patch

You'll need Ncurses for this build.

Create a Workspace


I recommend creating a workspace under your /home/<your user>/ directory that is dedicated to this build. So let's fire up your terminal and run the following:
$ export READLINE_SRC=~/workbench/readline/src
$ export READLINE_BUILD=~/workbench/readline/build
$ mkdir -pv ~/workbench/readline
$ mkdir $READLINE_SRC && mkdir $READLINE_BUILD
$ cd $READLINE_SRC

Gather the Sources


Now that we have a workspace created and we are currently in the src directory we can begin bringing down the sources and extracting them.

readline

$ wget http://ftp.gnu.org/gnu/readline/readline-6.2.tar.gz
$ tar -pxzf readline-6.2.tar.gz

patch

$ wget http://lfs-matrix.net/patches/downloads/readline/readline-6.2-fixes-1.patch
$ cd readline-6.2/
$ patch -Np1 -i ../readline-6.2-fixes-1.patch && cd ..

Build Environment


To make things a little smoother let's setup some environment variables:
$ export INSTALLDIR=~/workbench/gcc-g++-4.8.2/arm
$ export PATH=$INSTALLDIR/bin:$PATH
$ export TARGETMACH=arm-none-linux-gnueabi
$ export BUILDMACH=i686-pc-linux-gnu
$ export CROSS=arm-none-linux-gnueabi
$ export CC=${CROSS}-gcc
$ export LD=${CROSS}-ld
$ export AS=${CROSS}-as
$ export CXX=${CROSS}-g++
NOTE: Depending on whether you are using a cross-compiler built from my other wikis you might need to change INSTALLDIR to point to your cross-compiler.

Build Readline


$ cd ../build/
$ ../src/readline-6.2/./configure --prefix=/home/<your user>/workbench/readline/final --host=$TARGETMACH LDFLAGS=-L/home/<your user>/workbench/ncurses/include/lib
$ make SHLIB_LIBS=-lncurses
$ make install

Output


cd into the final directory and output its contents:
$ cd ../final/
$ ls
You should have the following directories:
  • bin (empty)
  • include
  • lib
  • share

Make sure the binaries are for ARM:
$ cd lib/
$ file libreadline.so.6.2
bash: ELF 32-bit LSB executable, ARM, version 1 (SYSV), dynamically linked, not stripped
If you see something *similar* to above you're good to go ;-)

Lastly, move the contents of these directories, or the directories themselves if they do not already exist, to your custom Linux file system or dev board.